#ifndef NAMED_H
#define NAMED_H

#include <map>
#include <utils/String.h>

class Named
{
public:

      virtual String getName() = 0;
      virtual String setName();
      
      Named* clone() = 0;
};


class NamedFactory
{
public:
    Named* addType(Named* newObject);
    Named* instantiateType(String sType);
    Named* getObject(String sName);

protected:
    std::map<String, Named*> types;
    std::map<String, Named*> objects;
};


#endif
